package PFC_2_3_3.koyicabuto;

import java.util.ArrayList;
import java.util.List;

import PFC_2_3_3.koyicabuto.BaseDatos.GruposDataBase;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Data;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;

public class ListaContactosActivity extends ListActivity{
	
	private GruposDataBase gruposDataBaseHelper = null;
	private SQLiteDatabase gruposDataBase = null;
	
	private ListView listaContactos = null;
	private Cursor mCursor = null;
	
	private Long idGrupoSeleccionado = null;
	
	//Cada ITEM es un CONTACT_ID
	private List<Long> listaSeleccion = new ArrayList<Long>();

	private Button guardarSeleccion = null;
	
	public void onCreate(Bundle savedInstance) {
		super.onCreate(savedInstance);	
		
		 //Obtenemos las variables que vienen de GruposListViewActivity
		 Bundle extras = getIntent().getExtras();
		 if(extras != null){
			 idGrupoSeleccionado = extras.getLong("idGrupoSeleccionado");
		 }
		
		 listaSeleccion = new ArrayList<Long>();
		 guardarSeleccion = (Button)findViewById(R.id.botonGuardarSeleccion);
		 
		 setTitle("Añadir nuevos contactos al grupo");
		 setContentView(R.layout.listacontactos);
		 
		 // Query: contacts with phone shorted by name
		 mCursor = getContentResolver().query(
				 Data.CONTENT_URI, new String[] { Data._ID, Data.DISPLAY_NAME, Phone.NUMBER, Data.CONTACT_ID},
		         Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "' AND " + Phone.NUMBER + " IS NOT NULL", null, Data.DISPLAY_NAME + " ASC");
		 startManagingCursor(mCursor);
        // Setup the list
        ListAdapter adapter = new CursorAdapter(this, mCursor);
        listaContactos = this.getListView();
        listaContactos.setAdapter(adapter);  
        listaContactos.setFocusable(false);  

	}
	
	public void checkItems(View view){
		long[] array = getListView().getCheckedItemIds();
		System.out.println(array);
	}
	
	public void volver(View view){
		Intent intent = new Intent(this, GruposItemActivity.class);
		intent.putExtra("idGrupoSeleccionado", idGrupoSeleccionado);
		startActivity(intent);
	}
	
	public void guardarSeleccion(View view){
		boolean error = false;		
		try{
			if(creaConexionBaseDatos() != null){
				for(Long iteracion:listaSeleccion){
					gruposDataBase.execSQL("INSERT INTO PERSONAL_GRUPOS (PG_PER_ID, PG_GR_ID ) " +
										   "VALUES(" + iteracion + ", " + idGrupoSeleccionado + ")") ;
				}
			}
			cierraConexionBaseDatos();
		}catch (Exception e) {
			error = true;
			Log.e("@@@@ERROR: ", "Excepcion al guardarSeleccion: " +e.getMessage());
		}
		if(!error){
			crearDialogoAlerta("Información", "Selección guardada correctamente.");
		}
	}
	
	private SQLiteDatabase creaConexionBaseDatos(){
		gruposDataBaseHelper = new GruposDataBase(this, "GruposDataBase", null, 2);
		gruposDataBase = gruposDataBaseHelper.getWritableDatabase();
		
		return gruposDataBase;
	}
	
	private void cierraConexionBaseDatos(){
		gruposDataBase.close();
	}
	
	/**
	 * Metodo con el que mostramos un diálogo de alerta en el caso de que se guarde correctamente un nuevo grupo.
	 */
	private void crearDialogoAlerta(String titulo, String mensaje){
	    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
	 
	    alertDialog.setTitle(titulo);
	    alertDialog.setMessage(mensaje);
	    alertDialog.setButton("OK", new OnClickListener() {
	        public void onClick(DialogInterface dialog, int which) {
	        }
	    });
	    alertDialog.show();	 
	}
	
	
	////////////////////////////////
	////  GETTER'S Y SETTER'S  ////
	//////////////////////////////
	
	public List<Long> getListaSeleccion() {
		return listaSeleccion;
	}

	public void setListaSeleccion(List<Long> listaSeleccion) {
		this.listaSeleccion = listaSeleccion;
	}
}
